﻿/*
 * FCKeditor - The text editor for Internet - http://www.fckeditor.net
 * Copyright (C) 2003-2009 Frederico Caldeira Knabben
 *
 * == BEGIN LICENSE ==
 *
 * Licensed under the terms of any of the following licenses at your
 * choice:
 *
 *  - GNU General Public License Version 2 or later (the "GPL")
 *    http://www.gnu.org/licenses/gpl.html
 *
 *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
 *    http://www.gnu.org/licenses/lgpl.html
 *
 *  - Mozilla Public License Version 1.1 or later (the "MPL")
 *    http://www.mozilla.org/MPL/MPL-1.1.html
 *
 * == END LICENSE ==
 *
 * This file define the HTML entities handled by the editor.
 */

var FCKXHtmlEntities = new Object() ;

FCKXHtmlEntities.Initialize = function()
{
	if ( FCKXHtmlEntities.Entities )
		return ;

	var sChars = '' ;
	var oEntities, e ;

	if ( FCKConfig.ProcessHTMLEntities )
	{
		FCKXHtmlEntities.Entities = {
			// Latin-1 Entities
			'?':'nbsp',
			'?':'iexcl',
			'￠':'cent',
			'￡':'pound',
			'¤':'curren',
			'￥':'yen',
			'|':'brvbar',
			'§':'sect',
			'¨':'uml',
			'?':'copy',
			'a':'ordf',
			'?':'laquo',
			'?':'not',
			'-':'shy',
			'?':'reg',
			'ˉ':'macr',
			'°':'deg',
			'±':'plusmn',
			'2':'sup2',
			'3':'sup3',
			'′':'acute',
			'μ':'micro',
			'?':'para',
			'·':'middot',
			'?':'cedil',
			'1':'sup1',
			'o':'ordm',
			'?':'raquo',
			'?':'frac14',
			'?':'frac12',
			'?':'frac34',
			'?':'iquest',
			'×':'times',
			'÷':'divide',

			// Symbols

			'?':'fnof',
			'?':'bull',
			'…':'hellip',
			'′':'prime',
			'″':'Prime',
			'￣':'oline',
			'?':'frasl',
			'?':'weierp',
			'?':'image',
			'?':'real',
			'?':'trade',
			'?':'alefsym',
			'←':'larr',
			'↑':'uarr',
			'→':'rarr',
			'↓':'darr',
			'?':'harr',
			'?':'crarr',
			'?':'lArr',
			'?':'uArr',
			'?':'rArr',
			'?':'dArr',
			'?':'hArr',
			'?':'forall',
			'?':'part',
			'?':'exist',
			'?':'empty',
			'?':'nabla',
			'∈':'isin',
			'?':'notin',
			'?':'ni',
			'∏':'prod',
			'∑':'sum',
			'?':'minus',
			'?':'lowast',
			'√':'radic',
			'∝':'prop',
			'∞':'infin',
			'∠':'ang',
			'∧':'and',
			'∨':'or',
			'∩':'cap',
			'∪':'cup',
			'∫':'int',
			'∴':'there4',
			'～':'sim',
			'?':'cong',
			'≈':'asymp',
			'≠':'ne',
			'≡':'equiv',
			'≤':'le',
			'≥':'ge',
			'?':'sub',
			'?':'sup',
			'?':'nsub',
			'?':'sube',
			'?':'supe',
			'⊕':'oplus',
			'?':'otimes',
			'⊥':'perp',
			'?':'sdot',
			'\u2308':'lceil',
			'\u2309':'rceil',
			'\u230a':'lfloor',
			'\u230b':'rfloor',
			'\u2329':'lang',
			'\u232a':'rang',
			'?':'loz',
			'?':'spades',
			'?':'clubs',
			'?':'hearts',
			'?':'diams',

			// Other Special Characters

			'"':'quot',
		//	'&':'amp',		// This entity is automatically handled by the XHTML parser.
		//	'<':'lt',		// This entity is automatically handled by the XHTML parser.
			'>':'gt',			// Opera and Safari don't encode it in their implementation
			'?':'circ',
			'?':'tilde',
			'?':'ensp',
			'?':'emsp',
			'?':'thinsp',
			'?':'zwnj',
			'?':'zwj',
			'?':'lrm',
			'?':'rlm',
			'–':'ndash',
			'—':'mdash',
			'‘':'lsquo',
			'’':'rsquo',
			'?':'sbquo',
			'“':'ldquo',
			'”':'rdquo',
			'?':'bdquo',
			'?':'dagger',
			'?':'Dagger',
			'‰':'permil',
			'?':'lsaquo',
			'?':'rsaquo',
			'€':'euro'
		} ;

		// Process Base Entities.
		for ( e in FCKXHtmlEntities.Entities )
			sChars += e ;

		// Include Latin Letters Entities.
		if ( FCKConfig.IncludeLatinEntities )
		{
			oEntities = {
				'à':'Agrave',
				'á':'Aacute',
				'?':'Acirc',
				'?':'Atilde',
				'?':'Auml',
				'?':'Aring',
				'?':'AElig',
				'?':'Ccedil',
				'è':'Egrave',
				'é':'Eacute',
				'ê':'Ecirc',
				'?':'Euml',
				'ì':'Igrave',
				'í':'Iacute',
				'?':'Icirc',
				'?':'Iuml',
				'D':'ETH',
				'?':'Ntilde',
				'ò':'Ograve',
				'ó':'Oacute',
				'?':'Ocirc',
				'?':'Otilde',
				'?':'Ouml',
				'?':'Oslash',
				'ù':'Ugrave',
				'ú':'Uacute',
				'?':'Ucirc',
				'ü':'Uuml',
				'Y':'Yacute',
				'T':'THORN',
				'?':'szlig',
				'à':'agrave',
				'á':'aacute',
				'a':'acirc',
				'?':'atilde',
				'?':'auml',
				'?':'aring',
				'?':'aelig',
				'?':'ccedil',
				'è':'egrave',
				'é':'eacute',
				'ê':'ecirc',
				'?':'euml',
				'ì':'igrave',
				'í':'iacute',
				'?':'icirc',
				'?':'iuml',
				'e':'eth',
				'?':'ntilde',
				'ò':'ograve',
				'ó':'oacute',
				'?':'ocirc',
				'?':'otilde',
				'?':'ouml',
				'?':'oslash',
				'ù':'ugrave',
				'ú':'uacute',
				'?':'ucirc',
				'ü':'uuml',
				'y':'yacute',
				't':'thorn',
				'?':'yuml',
				'?':'OElig',
				'?':'oelig',
				'?':'Scaron',
				'?':'scaron',
				'?':'Yuml'
			} ;

			for ( e in oEntities )
			{
				FCKXHtmlEntities.Entities[ e ] = oEntities[ e ] ;
				sChars += e ;
			}

			oEntities = null ;
		}

		// Include Greek Letters Entities.
		if ( FCKConfig.IncludeGreekEntities )
		{
			oEntities = {
				'Α':'Alpha',
				'Β':'Beta',
				'Γ':'Gamma',
				'Δ':'Delta',
				'Ε':'Epsilon',
				'Ζ':'Zeta',
				'Η':'Eta',
				'Θ':'Theta',
				'Ι':'Iota',
				'Κ':'Kappa',
				'Λ':'Lambda',
				'Μ':'Mu',
				'Ν':'Nu',
				'Ξ':'Xi',
				'Ο':'Omicron',
				'Π':'Pi',
				'Ρ':'Rho',
				'Σ':'Sigma',
				'Τ':'Tau',
				'Υ':'Upsilon',
				'Φ':'Phi',
				'Χ':'Chi',
				'Ψ':'Psi',
				'Ω':'Omega',
				'α':'alpha',
				'β':'beta',
				'γ':'gamma',
				'δ':'delta',
				'ε':'epsilon',
				'ζ':'zeta',
				'η':'eta',
				'θ':'theta',
				'ι':'iota',
				'κ':'kappa',
				'λ':'lambda',
				'μ':'mu',
				'ν':'nu',
				'ξ':'xi',
				'ο':'omicron',
				'π':'pi',
				'ρ':'rho',
				'?':'sigmaf',
				'σ':'sigma',
				'τ':'tau',
				'υ':'upsilon',
				'φ':'phi',
				'χ':'chi',
				'ψ':'psi',
				'ω':'omega',
				'\u03d1':'thetasym',
				'\u03d2':'upsih',
				'\u03d6':'piv'
			} ;

			for ( e in oEntities )
			{
				FCKXHtmlEntities.Entities[ e ] = oEntities[ e ] ;
				sChars += e ;
			}

			oEntities = null ;
		}
	}
	else
	{
		FCKXHtmlEntities.Entities = {
			'>':'gt' // Opera and Safari don't encode it in their implementation
		} ;
		sChars = '>';

		// Even if we are not processing the entities, we must render the &nbsp;
		// correctly. As we don't want HTML entities, let's use its numeric
		// representation (&#160).
		sChars += '?' ;
	}

	// Create the Regex used to find entities in the text.
	var sRegexPattern = '[' + sChars + ']' ;

	if ( FCKConfig.ProcessNumericEntities )
		sRegexPattern = '[^ -~]|' + sRegexPattern ;

	var sAdditional = FCKConfig.AdditionalNumericEntities ;

	if ( sAdditional && sAdditional.length > 0 )
		sRegexPattern += '|' + FCKConfig.AdditionalNumericEntities ;

	FCKXHtmlEntities.EntitiesRegex = new RegExp( sRegexPattern, 'g' ) ;
}
